package instance_of;

/**
 * instanceof 运算符
 * 格式:
 *  引用变量名 instanceof 类名或接口名
 */
interface JD {
}

abstract class Animal {

}

class Dog extends Animal implements JD {
}

class Sheep extends Animal {

}

public class Demo {
    public static void main(String[] args) {
        //1.普通类
        Dog dog = new Dog();
        boolean b = dog instanceof Dog;//instanceof运算符会去检测引用变量指向的对象能否赋值给右边类型,如果可以赋值结果为true,否则结果为false
                                      //Dog d=new Dog()
        System.out.println(b);

        //2.抽象类
        Animal a = new Dog();
        System.out.println(a instanceof Dog);//a引用指向的对象能否赋值给Dog类型
                                              // Dog d= new Dog();可以赋值,所以结果为true
        System.out.println(a instanceof Animal);//a引用指向的对象能否赋值给Animal类型
                                                //Animal temp=new Dog();可以赋值,所以结果为true

        //3.接口
        JD j = new Dog();
        System.out.println(j instanceof Dog);//j引用指向的对象能否赋值给Dog类型
                                            // Dog d= new Dog();可以赋值,所以结果为true
        System.out.println(j instanceof JD);//j引用指向的对象能否赋值给JD类型
                                            //JD temp= new Dog();可以赋值,所以结果为true

        //4.其他类
        Animal a2 = new Sheep();
        System.out.println(a2 instanceof Dog);//a2引用指向的对象能否赋值给Dog类型
                                              // Dog d = new Sheep();//所以结果为false
    }
}
